/**
 * 统一请求头配置管理
 * @description 集中管理所有接口请求的请求头配置
 */

import { getToken } from '@/utils/auth'
import store from '@/store'

/**
 * 获取公共请求头配置
 * @returns {Object} 公共请求头对象
 */
export function getCommonHeaders() {
  return {
    'Content-Type': 'application/json;charset=utf-8'
  }
}

/**
 * 获取认证请求头
 * @param {Boolean} includeToken 是否包含token，默认true
 * @returns {Object} 认证请求头对象
 */
export function getAuthHeaders(includeToken = true) {
  const headers = {}

  if (includeToken) {
    const token = getToken()
    if (token) {
      // 使用 token 字段传递令牌
      headers['token'] = token
    }
  }

  return headers
}

/**
 * 获取完整请求头配置
 * @param {Object} customHeaders 自定义请求头
 * @param {Boolean} includeToken 是否包含token，默认true
 * @returns {Object} 完整请求头对象
 */
export function getRequestHeaders(customHeaders = {}, includeToken = true) {
  return {
    ...getCommonHeaders(),
    ...getAuthHeaders(includeToken),
    ...customHeaders
  }
}

/**
 * 获取表单提交请求头
 * @param {Boolean} includeToken 是否包含token，默认true
 * @returns {Object} 表单请求头对象
 */
export function getFormHeaders(includeToken = true) {
  return {
    'Content-Type': 'application/x-www-form-urlencoded',
    ...getAuthHeaders(includeToken)
  }
}

/**
 * 获取文件上传请求头
 * @param {Boolean} includeToken 是否包含token，默认true
 * @returns {Object} 文件上传请求头对象
 */
export function getUploadHeaders(includeToken = true) {
  return {
    'Content-Type': 'multipart/form-data',
    ...getAuthHeaders(includeToken)
  }
}

/**
 * 获取下载请求头
 * @param {Boolean} includeToken 是否包含token，默认true
 * @returns {Object} 下载请求头对象
 */
export function getDownloadHeaders(includeToken = true) {
  return {
    'Content-Type': 'application/x-www-form-urlencoded',
    ...getAuthHeaders(includeToken)
  }
}

/**
 * 为axios config对象设置请求头
 * @param {Object} config axios配置对象
 * @param {Object} customHeaders 自定义请求头
 * @param {Boolean} includeToken 是否包含token，默认true
 * @returns {Object} 更新后的config对象
 */
export function setRequestHeaders(config = {}, customHeaders = {}, includeToken = true) {
  config.headers = {
    ...(config.headers || {}),
    ...getRequestHeaders(customHeaders, includeToken)
  }
  return config
}

/**
 * 获取用户信息相关请求头（可扩展）
 * @returns {Object} 用户信息请求头
 */
export function getUserInfoHeaders() {
  const headers = {}

  // 可以添加更多用户相关的头信息
  // 例如：用户ID、设备信息等
  const userId = store.getters.userId
  if (userId) {
    headers['User-Id'] = userId
  }

  return headers
}

/**
 * 请求头配置常量
 */
export const HEADER_KEYS = {
  TOKEN: 'token',
  CONTENT_TYPE: 'Content-Type',
  USER_ID: 'User-Id',
  AUTHORIZATION: 'Authorization'
}

/**
 * Content-Type常量
 */
export const CONTENT_TYPES = {
  JSON: 'application/json;charset=utf-8',
  FORM: 'application/x-www-form-urlencoded',
  MULTIPART: 'multipart/form-data',
  TEXT: 'text/plain',
  XML: 'application/xml'
}

export default {
  getCommonHeaders,
  getAuthHeaders,
  getRequestHeaders,
  getFormHeaders,
  getUploadHeaders,
  getDownloadHeaders,
  setRequestHeaders,
  getUserInfoHeaders,
  HEADER_KEYS,
  CONTENT_TYPES
}

